package cn.hss.io.buffered;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**自定义比较规则，实现文本排序复制
 * 思路分析：
 * 1、定义一个缓冲字符输入流管道与源文件接通
 * 2、定义一个List集合存储读取的每行数据
 * 3、定义一个循环按照行读取数据，存入到List集合中
 * 4、定义List集合存储首字符
 * 5、对List集合中的每行数据按照首字符索引升序排序
 * 6、定义一个缓冲字符输出流管道与目标文件接通
 * 7、遍历List集合中的每个元素，用缓冲字符输出流管道写出并换行
 * @author 作者：HeShaoShuai
 * @Email 邮箱：2569819541@qq.com
 * @Date 日期：2023/4/26 14:40
 * @Package 包名：cn.hss.io.buffered
 * @Project 项目名：JavaSE
 * @Version 1.0
 */
public class TextSortCopyList {
	public static void main(String[] args) {
		//1、定义一个缓冲字符输入流管道与源文件接通
		try {
			BufferedReader br = new BufferedReader(
					new FileReader(
							"D:\\BaiduNetdiskDownload\\Java实训相关文件\\出师表2.txt"));
			//6、定义一个缓冲字符输出流管道与目标文件接通
			BufferedWriter bw = new BufferedWriter(
					new FileWriter(
							"D:\\BaiduNetdiskDownload\\Java实训相关文件\\copy_出师表.txt"));

			//2、定义一个List集合存储读取的每行数据
			List<String> data = new ArrayList<>();
			//3、定义一个循环按照行读取数据，存入到List集合中
			String line;
			while ((line=br.readLine())!=null){
				//存入到List集合中
				data.add(line);
			}
			//4、定义List集合存储首字符
			List<Object> sizes = new ArrayList<>();
			Collections.addAll(sizes,"壹","贰","叁","肆","伍","陆","柒","捌","玖");
			// 5、对List集合中的每行数据按照首字符索引升序排序
			Collections.sort(data,
					(o1,o2)->sizes.indexOf(o1.substring(0,o1.indexOf(".")))
							-sizes.indexOf(o2.substring(0,o2.indexOf("."))));
			//7、遍历List集合中的每个元素，用缓冲字符输出流管道写出并换行
			for (String dataCher:data){
				//用缓冲输出流写出数据换行
				bw.write(dataCher);
				bw.newLine();
				bw.flush();//强制行刷新
			}
			System.out.println("复制完毕");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e){
			e.printStackTrace();
		}
	}
}
